本文介绍了SQL Trace功能使用的mysql.sql_sharing
表和information_schema.sql_sharing
表的表结构和相关字段说明。
mysql.sql_sharing
MySQL库下一张位于InnoDB引擎的系统表sql_sharing
,用于保存需要跟踪的指定的SQL语句。其表结构如下:
系统启动时会自动创建sql_sharing
表,无需您手动创建。
CREATE TABLE `sql_sharing` (
`Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`Sql_id` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Schema_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Type` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Digest_text` longtext COLLATE utf8_bin,
`Plan_id` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Plan` text COLLATE utf8_bin,
`Version` int(11) unsigned DEFAULT NULL,
`Create_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`Update_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`Extra_info` longtext COLLATE utf8_bin,
PRIMARY KEY (`Id`),
UNIQUE KEY `sqlid_schema_type` (`Sql_id`,`Schema_name`,`Type`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
各字段说明如下:
字段 | 描述 |
Id |
|
Sql_id | 模板化SQL语句的SQL ID。 |
Schema_name | 执行SQL语句所在的Schema的名称。 |
Type | 该记录被哪些功能引用。 |
Digest_text | 模板化后的SQL语句。 |
Plan_id | 执行计划ID。 |
Plan | 执行计划。 |
Version | 该记录在系统内部的版本号。 |
Create_time | 该记录的插入时间。 |
Update_time | 该记录的更新时间。 |
Extra_info | 系统记录的其他信息。 |
information_schema.sql_sharing
位于information_schema
库下的内存表sql_sharing
,用于记录由SQL Trace跟踪的SQL语句的执行计划和执行统计信息。其表结构如下:
系统启动时会自动创建sql_sharing
表,无需您手动创建。
CREATE TEMPORARY TABLE `SQL_SHARING` (
`TYPE` varchar(16) DEFAULT NULL,
`SQL_ID` varchar(64) DEFAULT NULL,
`SCHEMA_NAME` varchar(64) DEFAULT NULL,
`DIGEST_TEXT` varchar(2048) DEFAULT NULL,
`PLAN_ID` varchar(64) DEFAULT NULL,
`PLAN` varchar(1024) DEFAULT NULL,
`PLAN_EXTRA` varchar(1024) DEFAULT NULL,
`ERROR_CODE` bigint(21) DEFAULT NULL,
`REF_BY` varchar(512) DEFAULT NULL,
`FIRST_LOAD_TIME` datetime DEFAULT NULL,
`LAST_HIT_TIME` datetime DEFAULT NULL,
`EXECUTIONS` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`EXTRA` varchar(1024) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
各字段说明如下:
字段 | 描述 |
TYPE | 记录的类型。取值如下:
|
SQL_ID | 模板化SQL语句的SQL ID。 |
SCHEMA_NAME | 执行SQL语句所在的Schema的名称。 |
DIGEST_TEXT | 模板化后的SQL语句。 |
PLAN_ID | 执行计划ID。 |
PLAN | 执行计划。 |
PLAN_EXTRA | 其他信息。如表的访问方式(全表扫描、索引范围、等值访问)和是否使用PREPARE协议执行。 |
ERROR_CODE | 错误码。 |
REF_BY | 引用SQL语句或执行计划的功能。取值如下:
|
FIRST_LOAD_TIME | SQL语句或执行计划第一次记录到内存中的时间。 |
LAST_HIT_TIME | 该SQL语句或执行计划最近一次被命中的时间。 |
EXECUTIONS | 执行模板化SQL语句的总次数。 |
SUM_WAIT_TIME | 执行SQL语句的等待时间。单位:微秒。 |
MIN_WAIT_TIME | 最短等待时间。单位:微秒。 |
MAX_WAIT_TIME | 最长等待时间。单位:微秒。 |
SUM_EXEC_TIME | 执行SQL语句的总的时间。单位:微秒。 |
MIN_EXEC_TIME | 最短执行时间。单位:微秒。 |
MAX_EXEC_TIME | 最长执行时间。单位:微秒。 |
SUM_ROWS_SENT | 总返回行数。 |
MIN_ROWS_SENT | 最少返回行数。 |
MAX_ROWS_SENT | 最大返回行数。 |
SUM_ROWS_EXAMINED | 总扫描行数。 |
MIN_ROWS_EXAMINED | 最少扫描行数。 |
MAX_ROWS_EXAMINED | 最大扫描行数。 |
SUM_ROWS_AFFECTED | 总的影响行数。 |
MIN_ROWS_AFFECTED | 最少影响行数。 |
MAX_ROWS_AFFECTED | 最多影响行数。 |
SUM_LOGICAL_READ | 总的逻辑读次数。 |
MIN_LOGICAL_READ | 最少逻辑读次数。 |
MAX_LOGICAL_READ | 最多逻辑读次数。 |
SUM_PHY_SYNC_READ | 总的物理同步读次数。 |
MIN_PHY_SYNC_READ | 最少物理同步读次数。 |
MAX_PHY_SYNC_READ | 最多物理同步读次数。 |
SUM_PHY_ASYNC_READ | 总的物理异步读次数 。 |
MIN_PHY_ASYNC_READ | 最少物理异步读次数。 |
MAX_PHY_ASYNC_READ | 最多物理异步读次数。 |
EXTRA | 其他信息。 |
示例
SQL Trace功能用于跟踪查询记录,并通过information_schema.sql_sharing
表展示这些记录。例如,当配置loose_sql_trace_type
为ALL
后,可以在数据库中执行以下SQL命令,以查看跟踪结果。
执行如下语句:
CREATE TABLE t AS WITH RECURSIVE t(c1, c2, c3) AS (SELECT 1, 1, 1 UNION ALL SELECT c1+1, c2 + 1, c3 + 1 FROM t WHERE c1 < 100) SELECT c1, c2, c3 FROM t;
CREATE index i_c1 ON t(c1);
SELECT COUNT(*) FROM t;
执行结果如下:
+----------+
| count(*) |
+----------+
| 100 |
+----------+
您可以在information_schema.sql_sharing
系统表中查看SQL语句的跟踪信息和执行计划统计信息。
SELECT * FROM information_schema.sql_sharing;
执行结果如下:
*************************** 1. row ***************************
TYPE: SQL
SQL_ID: 83qmtgr8d6rwn
SCHEMA_NAME: test
DIGEST_TEXT: SELECT * FROM `t` WHERE `c2` < ?
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:30
LAST_HIT_TIME: 2022-11-07 19:04:30
EXECUTIONS: 1
SUM_WAIT_TIME: 184
MIN_WAIT_TIME: 184
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 417
MIN_EXEC_TIME: 417
MAX_EXEC_TIME: 417
SUM_ROWS_SENT: 2
MIN_ROWS_SENT: 2
MAX_ROWS_SENT: 2
SUM_ROWS_EXAMINED: 100
MIN_ROWS_EXAMINED: 100
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 101
MIN_LOGICAL_READ: 101
MAX_LOGICAL_READ: 101
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 2. row ***************************
TYPE: PLAN
SQL_ID: 83qmtgr8d6rwn
SCHEMA_NAME: test
DIGEST_TEXT: NULL
PLAN_ID: 5a4cvp4gjqgfj
PLAN: /*+ NO_INDEX(`t`@`select#1`) */
PLAN_EXTRA: {`t`@`select#1`:ALL}
ERROR_CODE: 0
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:30
LAST_HIT_TIME: 2022-11-07 19:04:30
EXECUTIONS: 1
SUM_WAIT_TIME: 184
MIN_WAIT_TIME: 184
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 417
MIN_EXEC_TIME: 417
MAX_EXEC_TIME: 417
SUM_ROWS_SENT: 2
MIN_ROWS_SENT: 2
MAX_ROWS_SENT: 2
SUM_ROWS_EXAMINED: 100
MIN_ROWS_EXAMINED: 100
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 101
MIN_LOGICAL_READ: 101
MAX_LOGICAL_READ: 101
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 3. row ***************************
TYPE: SQL
SQL_ID: cvdqw6ncsmwgh
SCHEMA_NAME: test
DIGEST_TEXT: CREATE TABLE `t` AS WITH RECURSIVE `t` ( `c1` , `c2` , `c3` ) AS ( SELECT ?, ... UNION ALL SELECT `c1` + ? , `c2` + ? , `c3` + ? FROM `t` WHERE `c1` < ? ) SELECT `c1` , `c2` , `c3` FROM `t`
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:15
LAST_HIT_TIME: 2022-11-07 19:04:15
EXECUTIONS: 1
SUM_WAIT_TIME: 376
MIN_WAIT_TIME: 376
MAX_WAIT_TIME: 376
SUM_EXEC_TIME: 10679
MIN_EXEC_TIME: 10679
MAX_EXEC_TIME: 10679
SUM_ROWS_SENT: 0
MIN_ROWS_SENT: 0
MAX_ROWS_SENT: 0
SUM_ROWS_EXAMINED: 200
MIN_ROWS_EXAMINED: 200
MAX_ROWS_EXAMINED: 200
SUM_ROWS_AFFECTED: 100
MIN_ROWS_AFFECTED: 100
MAX_ROWS_AFFECTED: 100
SUM_LOGICAL_READ: 1089
MIN_LOGICAL_READ: 1089
MAX_LOGICAL_READ: 1089
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 4. row ***************************
TYPE: SQL
SQL_ID: btcj0kh12wx26
SCHEMA_NAME: test
DIGEST_TEXT: CREATE INDEX `i_c1` ON `t` ( `c1` )
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:21
LAST_HIT_TIME: 2022-11-07 19:04:21
EXECUTIONS: 1
SUM_WAIT_TIME: 295
MIN_WAIT_TIME: 295
MAX_WAIT_TIME: 295
SUM_EXEC_TIME: 8620
MIN_EXEC_TIME: 8620
MAX_EXEC_TIME: 8620
SUM_ROWS_SENT: 0
MIN_ROWS_SENT: 0
MAX_ROWS_SENT: 0
SUM_ROWS_EXAMINED: 0
MIN_ROWS_EXAMINED: 0
MAX_ROWS_EXAMINED: 0
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 761
MIN_LOGICAL_READ: 761
MAX_LOGICAL_READ: 761
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL